<?php

/**
 * Komenta może się składać z: 
 * - parametrów: są poprzedzone '-' i muszą mieć równa się
 * - z przełączników: są poprzedzone '/' 
 */

class ACommandManager {
		
	
	public static function process( $params ) {
		if( empty( $params ) or $params[0] != "af.php" ) {
			echo "Wrong Parameters" ;
			return;
		}
		
		try {
			$params = self::rebuildParams($params);
			
			if( empty( $params["commands"]) && ( $params["switch"] == "/?" || $params["switch"] == "/help" ) ) {
				self::printHelp();
				return;
			} else {
				echo "Uncnown Command" ;
				self::printHelp();
				return;
			}
			
			self::runWrapper( $params["commands"], $params["params"], $params["switch"] );
			echo "\nParametry\n" ;
			print_r( $params );
		} catch( ACommandException $cmdex ) {
			print_r( $cmdex->getMessage() );
			self::printHelp();
			echo "\n";
		}
		
		
	}
	
	
	/**
	 * Przebudowuje parametry na tablice asocjacyjną
	 * @param array $params - array of params 
	 * @return reparsed_params, array( 'commands' => , '-' => , '--' =>, '/' => ,  ) 
	 */
	private static function rebuildParams( $params ) {
		
		$ret = array( 'commands' => array(), 'params' => array(), 'switch' => array() );
		
		for( $i = 1; $i < count($params); ++$i ) {
			$p = $params[$i] ;
			if( strpos($p, '-') === 0 ) {   // parameters with values
				$ex = explode( '=', substr($p, 1) ) ;
				if( count($ex) != 2 ) throw new ACommandException( "Wrogn parameter $p" ) ;
				$ret["params"][ $ex[0] ] = $ex[1] ; 	
			} else if( strpos($p, '/') === 0 ) {   // parameters without values
				$ret['switch'][] = substr($p, 1);
			} else { // commands
				$ret['commands'][] = $p ;
			}
			
		}
		
		return $ret;	
	
	}
	
	
	
	private static function runWrapper( $commands, $params, $switch ) {
		if( file_exists('./wrappers/ACommand'.ucfirst($commands[0]).'.php' ) ) {
			echo "przekazuje dalej wykonywanie" ;
		} else throw new ACommandException( "unknown command: ". $commands[0] );
	}
	
	
	public static function printHelp( ) {
		
		
	}
	
}


?>